package com.huangkailong.leetcode;

/**
 * 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。<br/>
 * <br/>
 * 回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。例如，121 是回文，而 123 不是。<br/>
 * <br/>
 * <br/>
 * <br/>
 * 示例 1：<br/>
 * <br/>
 * 输入：x = 121<br/>
 * 输出：true<br/>
 * 示例2：<br/>
 * <br/>
 * 输入：x = -121<br/>
 * 输出：false<br/>
 * 解释：从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。<br/>
 * 示例 3：<br/>
 * <br/>
 * 输入：x = 10<br/>
 * 输出：false<br/>
 * 解释：从右向左读, 为 01 。因此它不是一个回文数。<br/>
 * 示例 4：<br/>
 * <br/>
 * 输入：x = -101<br/>
 * 输出：false<br/>
 * <br/>
 * <br/>
 * 提示：<br/>
 * <br/>
 * -231<= x <= 231- 1<br/>
 * <br/>
 * <br/>
 * 进阶：你能不将整数转为字符串来解决这个问题吗？<br/>
 * <br/>
 * 来源：力扣（LeetCode）<br/>
 * 链接：https://leetcode-cn.com/problems/palindrome-number<br/>
 * 
 * @author huangkl
 * @since 1.0.0
 */
public class IsPalindrome {

    /**
     * 转出字符串进行判断
     *
     */
    public static boolean solution1(int x){
        if(x < 0 || (x % 10 == 0 && x != 0)){
            return false;
        }
        if( x > 0 && x < 10){
            return true;
        }

        String s = x+"";
        int r = 0;
        int l = s.length()-1;
        while (r <= l){
            if(s.charAt(r) != s.charAt(l)){
                return false;
            }
            r++;
            l--;
        }
        return true;
    }

    /**
     * 数字反转判断回文数
     *
     */
    public static boolean solution2(int x){
        if(x < 0 || (x % 10 == 0 && x != 0)){
            return false;
        }
        if( x > 0 && x < 10){
            return true;
        }

        int result = 0;
        // x <= result 说明已经过了树的中间部分了
        while (x > result){
            result = result*10 + x%10;
            x /= 10;
        }

        // 奇数 x == result/10
        // 偶数 x == result
        return x == result || x == result/10 ;
    }
}
